package com.marvels.product.productmanage.dao;

import java.util.List;
import java.util.Map;

import com.marvels.common.exception.MarvelsBusinessException;
import com.marvels.product.param.dto.McptProduct;
import com.marvels.product.productmanage.dto.FeeRateDTO;
import com.marvels.product.productmanage.dto.McptProductFundRelationDto;
import com.marvels.product.productmanage.dto.McptProductMappedDto;
import com.marvels.product.productmanage.dto.McptProductTypeChannelDto;
import com.marvels.product.productmanage.dto.McptProductTypeDto;
import com.marvels.product.productmanage.dto.McptProductTypeTermDto;
import com.marvels.product.productmanage.dto.McptProductVersionDto;

public interface ProductTypeDao {
	/**
	 * 查询产品类型
	 * @return
	 */
	public McptProductTypeDto getProduct(Long ProductCode);
	
	/**查询产品大类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 */
	public List<McptProductTypeDto> selectProduct(McptProductTypeDto mcptProductTypeDto);
	
	/**查询对应产品大类版本号
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductVersionDto
	 * @return
	 */
	public List<Map<String,Object>> selectVersion(McptProductVersionDto mcptProductVersionDto) ;
	
	public Integer selectCountProduct(Map<String,Object> map);
	
	/**通过产品大类code更新产品
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 */
	public void updateById(McptProductTypeDto mcptProductTypeDto);
	
	/**删除产品大类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param map
	 */
	public void deleteById(Map<String,Object> map);
	
	/**新增产品大类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 */
	public void insertProduct(McptProductTypeDto mcptProductTypeDto);
	
	/**批量插入产品大类对应的期限
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param list
	 */
	public void insertTerm(List<Map<String,Object>> list);
	
	/**批量插入产品大类对应的渠道
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param list
	 */
	public void insertChannel(List<Map<String,Object>> list);
	
	/**查询对应产品大类的渠道
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 */
	public List<McptProductTypeChannelDto> selectChannelByProductCode(McptProductTypeDto mcptProductTypeDto);
	
	/**
	 * 根据channelCode查询产品对应渠道信息
	 * @param mcptProductTypeDto
	 * @return
	 */
	public List<McptProductTypeChannelDto> selectByChannelCode(McptProductTypeChannelDto mcptProductTypeChannelDto);
	
	/**查询对应产品大类的期限
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 */
	public List<McptProductTypeTermDto> selectTermByProductCode(McptProductTypeDto mcptProductTypeDto);
	
	/**停用产品大类对应渠道
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 */
	public void updateChannelByProductType(McptProductTypeDto mcptProductTypeDto);
	
	/**停用产品大类对应期限
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 */
	public void updateTermByProductType(McptProductTypeDto mcptProductTypeDto);
	
	/**生成产品大类版本记录
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 */
	public void insertMcptProductVersion(McptProductTypeDto mcptProductTypeDto);
	
	/**查询版本号是否重复
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 */
	public Integer selectByVersion(McptProductTypeDto mcptProductTypeDto);
	
	/**查询产品大类版本
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 */
	public List<McptProductTypeDto> selectProductVersion(McptProductTypeDto mcptProductTypeDto);
	
	/**更新产品大类版本状态
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductVersionDto
	 */
	public void updateProductVersion(McptProductVersionDto mcptProductVersionDto);
	
	/**查询产品大类生效版本数
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductVersionDto
	 * @return
	 */
	public Integer checkUnique(McptProductVersionDto mcptProductVersionDto);
	
	/**插入产品小类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param list
	 */
	public void insertSProduct(List<Map<String,Object>> list);
	
	/**更新整个版本产品小类状态
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductVersionDto
	 */
	public void updateSProduct(McptProductVersionDto mcptProductVersionDto);
	
	/**查询版本小类
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductTypeDto
	 * @return
	 */
	public List<McptProduct> selectSProductByVersion(McptProductTypeDto mcptProductTypeDto);
	
	/**插入产品映射资金源
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param list
	 */
	public void insertMappingOfProductFund(List<McptProductFundRelationDto> list);
	
	/**根据产品小类code查询产品小类表
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param list
	 * @return
	 */
	public List<McptProductFundRelationDto> selectMappingOfProductFundByProductCode (List<McptProductFundRelationDto> list);
	
	/**查询产品映射资金源
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductFundRelationDto
	 * @return
	 */
	public List<McptProductFundRelationDto> selectProdutMappingFund(McptProductFundRelationDto mcptProductFundRelationDto);
	
	/**更新产品映射资金源表根据主键id
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param list
	 */
	public void updateProdutMappingFundByIds(List<McptProductFundRelationDto> list);
	
	/**删除产品映射资金源
	 * @author 娄凯琦
	 * @date 2018年4月14日  
	 * @param mcptProductFundRelationDto
	 */
	public void deleteProdutMappingFundById(McptProductFundRelationDto mcptProductFundRelationDto);
	
	/**插入产品映射渠道信息
	 * @author 娄凯琦
	 * @date 2018年4月16日  
	 * @param mcptProductMappedDto
	 */
	public void insertproductMappedChannel(List<McptProductMappedDto> ProductMappedList);
	
	/**查询产品映射渠道信息
	 * @author 娄凯琦
	 * @date 2018年4月16日  
	 * @param mcptProductMappedDto
	 * @return
	 */
	public List<McptProductMappedDto> selectProductMapped(McptProductMappedDto mcptProductMappedDto);
	
	
	/**删产品映射渠道
	 * @author 娄凯琦
	 * @date 2018年4月16日  
	 * @param mcptProductMappedDto
	 * @throws MarvelsBusinessException
	 */
	public void updateProductMappedChannel(McptProductMappedDto mcptProductMappedDto) throws MarvelsBusinessException;
	
	
	/**根据产品小类codes查询
	 * @author 娄凯琦
	 * @date 2018年4月17日  
	 * @param mcptProductMappedDto
	 * @throws MarvelsBusinessException
	 */
	public List<Integer> selectProductMappedChannelByProductCodes(List<McptProductMappedDto> mcptProductMappedDto) throws MarvelsBusinessException;

	
	/**删除产品小类根据productcodes
	 * @author 娄凯琦
	 * @date 2018年4月17日  
	 * @param list
	 * @throws MarvelsBusinessException
	 */
	public void updateProductMappedChannelByProductCodes(List<Integer> list) throws MarvelsBusinessException;
	
	
	
	/**根据小类code查询利率
	 * @author 娄凯琦
	 * @date 2018年5月9日  
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductFundRelationDto> selectRateByProductCode(McptProduct dto) throws MarvelsBusinessException;
	
	
	/**通过patternType查询
	 * @param patternType
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<McptProductTypeDto> selectProductTypeByPatternType(String patternType) throws MarvelsBusinessException;
	/**
	 * 获取管理费和咨询费费率
	 * @param feeRateDto
	 * @return
	 * @throws MarvelsBusinessException
	 */
	public List<FeeRateDTO> getFeeRate(FeeRateDTO feeRateDto) throws MarvelsBusinessException;

	/**
	 * 
	 * @param mcptProductTypeDto
	 * @return
	 */
	public McptProductTypeDto queryOnlineProduct(McptProductTypeDto mcptProductTypeDto);

	/**
	 * 查询线上产品、期数信息
	 * 
	 * @return
	 */
	public Map<String, Object> getHomeInfo();

}
